package com.cn.demo2.test2;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
 * 根据参数类型获取一个构造方法，无论其访问权限。
 *
 * 包括公共、私有、受保护以及默认访问权限的构造方法。
 * 需要通过 setAccessible(true) 来访问非公共构造方法。
 * 参数为构造方法的参数类型列表，按顺序传递。
 * 如果找不到匹配的构造方法，则抛出 NoSuchMethodException。
 */
public class Example4 {
    private int age;

    private Example4(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class<Example4> example4Class = Example4.class;
        Constructor<Example4> declaredConstructor = example4Class.getDeclaredConstructor(int.class);
        declaredConstructor.setAccessible(true); // 允许访问私有构造方法
        Example4 example4 = declaredConstructor.newInstance(25);
        System.out.println("Example4 instance created with age: " + example4);
        System.out.println(example4.getAge());

    }

}
